import http from '../utils/request';

// 全域配置API前缀
const KEY_VALUE_API_PREFIX = '[KeyValue]';

// Key-Value配置类型
export interface KeyValue {
  id?: number;
  type?: string;
  key: string;
  value: any;
  desc?: string;
  createdAt?: Date | string;
  updatedAt?: Date | string;
}

// 查询参数接口
export interface KeyValueQueryParams {
  id?: number;
  pageSize?: number;
  pageNo?: number;
  key?: string;
  type?: string;
  desc?: string;
  createdAt?: string;
  updatedAt?: string;
}

// 创建Key-Value数据
export interface CreateKeyValueData {
  key: string;
  value: any;
  type?: string;
  desc?: string;
}

// 更新Key-Value数据
export interface UpdateKeyValueData {
  id: number;
  key?: string;
  value?: any;
  type?: string;
  desc?: string;
}

// 分页响应接口
export interface KeyValuePageResponse {
  pageData: KeyValue[];
  total: number;
  pageSize: number;
  pageNo: number;
}

/**
 * 全域配置API
 */
export const keyValueApi = {
  /**
   * 获取Key-Value列表（分页）
   * @param {KeyValueQueryParams} params - 查询参数
   * @returns {Promise<KeyValuePageResponse>} - HTTP GET请求的Promise对象
   */
  getList: (params: KeyValueQueryParams = {}) => {
    console.log(`${KEY_VALUE_API_PREFIX} 获取Key-Value列表`, params);
    return http.get('/key-value', params, false, true, 'SUPER_ADMIN');
  },

  /**
   * 查询单个Key-Value（通过/query接口，返回第一个匹配项）
   * @param {KeyValueQueryParams} params - 查询参数
   * @returns {Promise<KeyValue>} - HTTP GET请求的Promise对象
   */
  queryOne: (params: KeyValueQueryParams = {}) => {
    console.log(`${KEY_VALUE_API_PREFIX} 查询单个Key-Value`, params);
    return http.get('/key-value/query', params, false, true, 'SUPER_ADMIN');
  },

  /**
   * 查询Key-Value列表（通过/query接口，返回所有匹配项）
   * @param {Record<string, any>} conditions - 查询条件
   * @returns {Promise<KeyValuePageResponse>} - HTTP GET请求的Promise对象
   */
  query: (conditions: Record<string, any> = {}) => {
    console.log(`${KEY_VALUE_API_PREFIX} 查询Key-Value列表`, conditions);
    // 注意：后端有两个/query路由，这里使用带条件的查询
    return http.get('/key-value/query', conditions, false, true, 'SUPER_ADMIN');
  },

  /**
   * 创建或更新Key-Value
   * @param {CreateKeyValueData | UpdateKeyValueData} data - Key-Value数据
   * @returns {Promise<KeyValue>} - HTTP POST请求的Promise对象
   */
  createOrUpdate: (data: CreateKeyValueData | UpdateKeyValueData) => {
    console.log(`${KEY_VALUE_API_PREFIX} 创建或更新Key-Value`, data);
    return http.post('/key-value', data, false, true, true, 'SUPER_ADMIN');
  },

  /**
   * 更新Key-Value
   * @param {number} id - Key-Value ID
   * @param {UpdateKeyValueData} data - 更新数据
   * @returns {Promise<KeyValue>} - HTTP PATCH请求的Promise对象
   */
  update: (id: number, data: Omit<UpdateKeyValueData, 'id'>) => {
    console.log(`${KEY_VALUE_API_PREFIX} 更新Key-Value:`, id, data);
    return http.patch(`/key-value/${id}`, data, false, true, 'SUPER_ADMIN');
  },

  /**
   * 删除Key-Value
   * @param {number} id - Key-Value ID
   * @returns {Promise} - HTTP DELETE请求的Promise对象
   */
  delete: (id: number) => {
    console.log(`${KEY_VALUE_API_PREFIX} 删除Key-Value:`, id);
    return http.delete(`/key-value/${id}`, {}, false, true, 'SUPER_ADMIN');
  },
};

